#include <iostream>
#include <unistd.h>
#include <signal.h>

using namespace std;

// void PrintPending(sigset_t &pending)
// {
//     for(int i = 31; i >= 1; --i)
//     {
//         if(sigismember(&pending, i))
//         {
//             cout << "1";
//         }
//         else
//         {
//             cout << "0";
//         }
//     }
//     cout << "\n\n";
// }

// void handler(int signo)
// {
//     cout << "catch a signo : " << signo << endl;
// }

// int main()
// {
//     signal(2, handler);

//     sigset_t bset, oset;
//     sigemptyset(&bset);
//     sigemptyset(&oset);
//     sigaddset(&bset, 2);

//     sigprocmask(SIG_SETMASK, &bset, &oset);

//     sigset_t pending;
//     int cnt = 0;
//     while(true)
//     {
//         int n = sigpending(&pending);
//         if(n < 0)
//         {
//             continue;
//         }
//         PrintPending(pending);
//         sleep(1);
//         cnt++;

//         if(cnt == 10)
//         {
//             cout << "unblock 2 signo" << endl;
//             sigprocmask(SIG_SETMASK, &oset, nullptr);
//         }
//     }
//     return 0;
// }


int flag = 0;

void handler(int signo)
{
    cout << "catch a signal: " << signo << endl;
    flag = 1;
}

int main()
{
    signal(2, handler);
    while(!flag);

    cout << "process quit normal" << endl;
    return 0;
}